package com.demo.project_template.config.mpconfig;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


/**
 * @author yyl25
 */
public class MybatisPlusGenerator {

    public static void main(String[] args) {
        //为create_time和update_time字段添加自动填充注解
        List<com.baomidou.mybatisplus.generator.IFill> tableFillList = new ArrayList<>();
        tableFillList.add(new Column("create_time", FieldFill.INSERT));
        tableFillList.add(new Column("update_time", FieldFill.INSERT_UPDATE));
        //TODO 改为自己的包名（必改）
        String parentPackage = "com.demo.project_template";

        String mapperXmlPath = "/src/main/resources/mapper";
        //TODO 作者名字
        String author = "杨玉龙";

        //数据库连接信息
        //TODO 数据库信息（必改）
        String url = "jdbc:mysql://localhost:3306/friend?useUnicode=true&useSSL=false&characterEncoding=utf8";
        String username = "root";
        String password = "root";

        //表名集合
        List<String> tables = new ArrayList<>();
        //TODO 生成的表名称（必改）
//        tables.add("t_feedback");
//        tables.add("t_friend");
//        tables.add("t_gift");
//        tables.add("t_gold_exchange");
//        tables.add("t_gold_recharge");
//        tables.add("t_hobby");
//        tables.add("t_integral_payouts");
//        tables.add("t_order");
//        tables.add("t_post");
//        tables.add("t_post_comment");
//        tables.add("t_post_like");
//        tables.add("t_post_notice");
//        tables.add("t_report");
//        tables.add("t_sign_in");
//        tables.add("t_unlock_wechat");
//        tables.add("t_user");
//        tables.add("t_user_black");
//        tables.add("t_user_gift");
//        tables.add("t_user_gold_record");
//        tables.add("t_user_greet");
//        tables.add("t_integral_record");
//        tables.add("t_user_like");
//        tables.add("t_user_view");
//        tables.add("t_user_wallet");
        tables.add("t_user_wish");
//        tables.add("t_vip_recharge");
        tables.add("t_wish_record");


        FastAutoGenerator.create(url, username, password)
                //全局配置
                .globalConfig(builder -> {
                    builder.fileOverride()
                            .disableOpenDir()
                            .outputDir(System.getProperty("user.dir") + "/src/main/java")
                            .author(author)
                            .enableSwagger()
                            .dateType(DateType.ONLY_DATE)
                            .commentDate("yyyy-MM-dd HH:mm:ss");
                })
                //包配置
                .packageConfig(builder -> {
                    builder.parent(parentPackage)
                            .entity("entity")
                            .service("service")
                            .serviceImpl("service.impl")
                            .mapper("mapper")
                            .xml("mapper.xml")
                            .controller("controller")
                            //.other("config")
                            .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + mapperXmlPath));
                })


                //策略配置
                .strategyConfig(builder -> {
                    builder.addInclude(tables)
                            .addTablePrefix("t_")
                            .serviceBuilder()
                            .formatServiceFileName("%sService")
                            .formatServiceImplFileName("%sServiceImpl")
                            .entityBuilder().fileOverride()
                            .enableLombok()
                            .logicDeleteColumnName("is_delete")
                            .addTableFills(tableFillList)
                            .versionColumnName("version")
                            .enableTableFieldAnnotation()
                            .controllerBuilder()
                            .formatFileName("%sController")
                            .enableRestStyle()
                            .mapperBuilder()
                            .superClass(BaseMapper.class)
                            .formatMapperFileName("%sMapper")
                            .enableMapperAnnotation()
                            .formatXmlFileName("%sMapper").fileOverride()
                            .enableBaseResultMap()
                            .enableBaseColumnList();
                })
                .execute();
    }

}

